#include "MprpcApplication.h"
#include "Friend.pb.h"

#include <iostream>

int main(int argc, char *argv[])
{
    // 整个程序启动以后，要想使用mprpc框架，一定要先调用初始化函数（仅调用一次）
    MprpcApplication::Init(argc, argv);

    fixbug::FriendServiceRpc_Stub stub(new MprpcChannel());

    fixbug::GetFriendsListRequest request;
    request.set_userid(1999);

    // rpc方法的响应
    fixbug::GetFriendsListResponse response;

    MprpcController controller;

    // 这里最后一个参数google::protobuf::Closure *done，设为了nullptr，因为我们没有采用回调发送，而是在CallMethod直接
    // 编写了tcp的发送 TO PONDER
    // 发起rpc方法的调用，实际经过多态，最终执行MprpcChannel::CallMehtod
    stub.GetFriendsList(&controller, &request, &response, nullptr);

    if (controller.Failed())
    {
        std::cout << controller.ErrorText() << std::endl;
    }
    else
    {
        if (0 == response.result().errcode())
        {
            // 调用成功
            std::cout << "rpc GetFriendsList response success" << std::endl;
            int list_size = response.friends_size();
            for (int i = 0; i < list_size; i++)
            {
                std::cout << "num:" << i + 1 << " --- name:" << response.friends(i) << std::endl;
            }
        }
        else
        {
            std::cout << "rpc GetFriendsList response error:" << response.result().errmsg() << std::endl;
        }
    }

    return 0;
}